package notes.designpattern.java.d2_jiekougeli;

// 接口隔离原则
// 优化后的
public class Jiekougeli2 {

	public static void main(String[] args) {
		A1 a = new A1();
		a.depend(new B1());
		a.depend2(new B1());
		a.depend3(new B1());
		
		C1 c = new C1();
		c.depend(new D1());
		c.depend4(new D1());
		c.depend5(new D1());
	}
}


// 接口拆分成三个接口
interface I1 {
	public void option1();
}

interface I2 {
	public void option2();
	public void option3();
}

interface I3 {
	public void option4();
	public void option5();
}

// class B1实现了接口I1, I2，所以要重写3个方法
class B1 implements I1, I2 {
	@Override
	public void option1() {
		System.out.println(" B op1");
	}

	@Override
	public void option2() {
		System.out.println(" B op2");
	}

	@Override
	public void option3() {
		System.out.println(" B op3");		
	}
}

//class D实现了接口I1,I3，所以要重写3个方法
class D1 implements I1, I3 {
	@Override
	public void option1() {
		System.out.println(" D op1");
	}

	@Override
	public void option4() {
		System.out.println(" D op4");
	}

	@Override
	public void option5() {
		System.out.println(" D op5");
	}
	
}

// class A1依赖接口1，2，3三个方法
class A1 {
	public void depend(I1 i1) {
		i1.option1();
	}
	public void depend2(I2 i2) {
		i2.option2();
	}
	public void depend3(I2 i2) {
		i2.option3();
	}
}

//class C1依赖接口1，4，5三个方法
class C1 {
	public void depend(I1 i) {
		i.option1();
	}
	public void depend4(I3 i3) {
		i3.option4();
	}
	public void depend5(I3 i3) {
		i3.option5();
	}
}